﻿var MapExtFix = function () {
    var MapExtFix = function () { };
    MapExtFix.prototype = MapExt;
    var MapExtFix = new MapExtFix();

    function autoCalcWinFeatures() {
        var iX = 800,
            iY = 552,
            iL = (window.screen.width - iX) / 2,
            iT = (window.screen.height - iY - 80) / 2;
        if (iL < 0) iL = 0;
        if (iT < 0) iT = 0;
        return "left=" + iL + ",top=" + iT + ",width=" + iX + ",height=" + iY + ",status=1,resizable=1";
    }

    function showAjaxMessage(val, success, fail) {
        if (val) {
            if (val.Result) {
                message = val.KeyValue;
                if (message) { alert(message); }
                if (success) { success(val); }
            } else if (val.ErrorMessage) {
                message = val.ErrorMessage;
                if (message) { alert(message); }
                if (fail) { fail(val); }
            }
            else { }
        } else {
            alert("操作失败！请联系系统管理员！");
            return;
        }
    }

    MapExtFix.openWindow = function (option) {
        /// <summary>
        /// 打开窗口, 如果不传dialogFeatures, 则自适应.
        /// </summary>
        /// <param name="option">The option.</param>
        /// <returns></returns>
        var features = option.dialogFeatures;
        option.dialogFeatures = (features ? features : autoCalcWinFeatures());
        MapExt.openWindow(option);
    }

    MapExtFix.httpGetEx = function (option, success, fail) {
        /// <summary>
        /// 小平台Get方法扩展, 自动解析返回值并提示, 提供成功失败接口
        /// </summary>
        /// <param name="option">The option.</param>
        /// <param name="success">The success.</param>
        /// <param name="fail">The fail.</param>
        /// <returns></returns>
        var val = MapExt.httpGet(option);
        showAjaxMessage(val, success, fail);
        return val;
    }

    MapExtFix.post = function (url, data, callback, postType) {
        /// <summary>
        /// 简化POST请求书写方式（请求默认仍然是同步模式）。
        /// </summary>
        /// <param name="url">The URL.</param>
        /// <param name="data">The data.</param>
        /// <param name="callback">The callback.</param>
        /// <param name="postType">Type of the post.</param>
        /// <returns></returns>
        var _rtn = null;
        //支持缩写版本的ServiceInfo： Cbgl.ContractService.MethodName = Mysoft.Cbgl.Services.ContractService.MethodName
        var _regMysoft = /^Mysoft\./;
        var _regService = /\.Service\./;
        var _regPrefix = /^Mysoft\.[a-zA-Z]+\./;
        url = _regMysoft.test(url) ? url : ("Mysoft." + url);
        url = _regService.test(url) ? url : url.replace(url.match(_regPrefix), url.match(_regPrefix) + "Services.");
        postType = (postType) ? postType.toString().toLowerCase() : postType; //转换小写
        switch (postType) {
            case "json":
                {
                    _rtn = MapExt.postJSON({
                        serviceInfo: url,
                        data: data
                    });
                    break;
                }
            case "xml":
                {
                    _rtn = MapExt.postXml({
                        serviceInfo: url,
                        data: data
                    });
                    break;
                }
            case "object":
            default:
                {
                    _rtn = MapExt.postObject({
                        serviceInfo: url,
                        data: data
                    });
                    break;
                }
        }

        //判断是否有回调函数
        if (callback) {
            //有回调函数，则回调
            callback(_rtn);
        } else {
            //无回调函数，返回ajax请求结果
            return _rtn;
        }
    };

    MapExtFix.postmsg = function (url, data, callback, postType) {
        /// <summary>
        /// 简化POST请求书写方式（自动提示错误消息模式）（请求默认仍然是同步模式）。
        /// 在有回调函数的情况下，如果请求异常失败则自动跳出提示信息，且不调用回调函数。
        /// 如果请求属于业务失败且有业务消息，则自动提示业务消息，并调用回调函数，因此回调函数中可以不写提示错误消息的alter语句。
        /// </summary>
        /// <param name="url">The URL.</param>
        /// <param name="data">The data.</param>
        /// <param name="callback">The callback.</param>
        /// <param name="postType">Type of the post.</param>
        /// <returns></returns>

        var _rtn = this.post(url, data, null, postType);    //以无回调函数的方式调用基础post，得到返回值

        //判断是否有回调函数
        if (callback) {
            if (!_rtn) {
                //请求失败或无返回结果，提示系统级错误
                alert("请求处理异常，请联系管理员（MapExtFix.post）！");
                return;
            } else if (!_rtn.Result && _rtn.ErrorMessage) {
                //执行失败，且有错误消息，则返回错误消息
                alert(_rtn.ErrorMessage);
            }
            //有回调函数，则回调
            callback(_rtn);
        } else {
            //无回调函数，返回ajax请求结果
            return _rtn;
        }
    }

    return MapExtFix;
}();
var mape = MapExtFix;   //别名mape